--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/ssl_self_signed.py a9cc4b996b8da8ff414e305825f372ca12dc138d (a9cc4b99) Text, 2.65 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Self-signed TLS certificate generation for local HTTPS."""
Tff7b72import T7ee787ipaddress
Tff7b72import T7ee787os
Tff7b72from T7ee787datetime Tff7b72import Te6edf3UTCTb4b4b4, Te6edf3datetimeTb4b4b4, Te6edf3timedelta
Tff7b72from T7ee787cryptography Tff7b72import Te6edf3x509
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787backends Tff7b72import Te6edf3default_backend
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787primitives Tff7b72import Te6edf3hashesTb4b4b4, Te6edf3serialization
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787primitivesT7ee787.T7ee787asymmetric Tff7b72import Te6edf3rsa
Tff7b72from T7ee787cryptographyT7ee787.T7ee787x509T7ee787.T7ee787oid Tff7b72import Te6edf3NameOID
Tff7b72def Td2a8ffgenerate_ssl_certificateTb4b4b4(Te6edf3cert_pathTb4b4b4: Tffa657strTb4b4b4, Te6edf3key_pathTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
T8b949e"""Generate a self-signed SSL certificate for local HTTPS.
Args:
cert_path: Path where the certificate will be saved
key_path: Path where the private key will be saved
"""
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3cert_pathTb4b4b4) Tff7b72and Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3key_pathTb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3private_key Tff7b72= Te6edf3rsaTff7b72.Td2a8ffgenerate_private_keyTb4b4b4(
Te6edf3public_exponentTff7b72=T79c0ff65537Tb4b4b4,
Te6edf3key_sizeTff7b72=T79c0ff2048Tb4b4b4,
Te6edf3backendTff7b72=Te6edf3default_backendTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3subject Tff7b72= Te6edf3issuer Tff7b72= Te6edf3x509Tff7b72.Td2a8ffNameTb4b4b4(
Tb4b4b4[
Te6edf3x509Tff7b72.Td2a8ffNameAttributeTb4b4b4(Te6edf3NameOIDTff7b72.Td2a8ffCOUNTRY_NAMETb4b4b4, Ta5d6ff"Ta5d6ffUSTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3x509Tff7b72.Td2a8ffNameAttributeTb4b4b4(Te6edf3NameOIDTff7b72.Td2a8ffSTATE_OR_PROVINCE_NAMETb4b4b4, Ta5d6ff"Ta5d6ffLocalTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3x509Tff7b72.Td2a8ffNameAttributeTb4b4b4(Te6edf3NameOIDTff7b72.Td2a8ffLOCALITY_NAMETb4b4b4, Ta5d6ff"Ta5d6ffLocalTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3x509Tff7b72.Td2a8ffNameAttributeTb4b4b4(Te6edf3NameOIDTff7b72.Td2a8ffORGANIZATION_NAMETb4b4b4, Ta5d6ff"Ta5d6ffReticulum MeshChatXTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3x509Tff7b72.Td2a8ffNameAttributeTb4b4b4(Te6edf3NameOIDTff7b72.Td2a8ffCOMMON_NAMETb4b4b4, Ta5d6ff"Ta5d6fflocalhostTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Te6edf3cert Tff7b72= Tb4b4b4(
Te6edf3x509Tff7b72.Td2a8ffCertificateBuilderTb4b4b4(Tb4b4b4)
Tff7b72.Td2a8ffsubject_nameTb4b4b4(Te6edf3subjectTb4b4b4)
Tff7b72.Td2a8ffissuer_nameTb4b4b4(Te6edf3issuerTb4b4b4)
Tff7b72.Td2a8ffpublic_keyTb4b4b4(Te6edf3private_keyTff7b72.Td2a8ffpublic_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72.Td2a8ffserial_numberTb4b4b4(Te6edf3x509Tff7b72.Td2a8ffrandom_serial_numberTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72.Td2a8ffnot_valid_beforeTb4b4b4(Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Te6edf3UTCTb4b4b4)Tb4b4b4)
Tff7b72.Td2a8ffnot_valid_afterTb4b4b4(Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Te6edf3UTCTb4b4b4) Tff7b72+ Te6edf3timedeltaTb4b4b4(Te6edf3daysTff7b72=T79c0ff365Tb4b4b4)Tb4b4b4)
Tff7b72.Td2a8ffadd_extensionTb4b4b4(
Te6edf3x509Tff7b72.Td2a8ffSubjectAlternativeNameTb4b4b4(
Tb4b4b4[
Te6edf3x509Tff7b72.Td2a8ffDNSNameTb4b4b4(Ta5d6ff"Ta5d6fflocalhostTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3x509Tff7b72.Td2a8ffIPAddressTb4b4b4(Te6edf3ipaddressTff7b72.Td2a8ffIPv4AddressTb4b4b4(Ta5d6ff"Ta5d6ff127.0.0.1Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3x509Tff7b72.Td2a8ffIPAddressTb4b4b4(Te6edf3ipaddressTff7b72.Td2a8ffIPv6AddressTb4b4b4(Ta5d6ff"Ta5d6ff::1Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3criticalTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)
Tff7b72.Td2a8ffsignTb4b4b4(Te6edf3private_keyTb4b4b4, Te6edf3hashesTff7b72.Td2a8ffSHA256Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3default_backendTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4)
Te6edf3cert_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3cert_pathTb4b4b4)
Tff7b72if Te6edf3cert_dirTb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3cert_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3cert_pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3certTff7b72.Td2a8ffpublic_bytesTb4b4b4(Te6edf3serializationTff7b72.Td2a8ffEncodingTff7b72.Td2a8ffPEMTb4b4b4)Tb4b4b4)
Te6edf3key_fd Tff7b72= Te6edf3osTff7b72.Td2a8ffopenTb4b4b4(Te6edf3key_pathTb4b4b4, Te6edf3osTff7b72.Td2a8ffO_WRONLY Tff7b72| Te6edf3osTff7b72.Td2a8ffO_CREAT Tff7b72| Te6edf3osTff7b72.Td2a8ffO_TRUNCTb4b4b4, T79c0ff0o600Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffwriteTb4b4b4(
Te6edf3key_fdTb4b4b4,
Te6edf3private_keyTff7b72.Td2a8ffprivate_bytesTb4b4b4(
Te6edf3encodingTff7b72=Te6edf3serializationTff7b72.Td2a8ffEncodingTff7b72.Td2a8ffPEMTb4b4b4,
Tffa657formatTff7b72=Te6edf3serializationTff7b72.Td2a8ffPrivateFormatTff7b72.Td2a8ffPKCS8Tb4b4b4,
Te6edf3encryption_algorithmTff7b72=Te6edf3serializationTff7b72.Td2a8ffNoEncryptionTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72finallyTb4b4b4:
Te6edf3osTff7b72.Td2a8ffcloseTb4b4b4(Te6edf3key_fdTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────